home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 626-637 / disk_633 / galer / galer.doc < prev    next >
Text File  |  1992-05-06  |  45KB  |  1,281 lines

  1.  
  2.  
  3. GALer V1.3 - copyright by Christian Habermann
  4.               Asamstr. 17
  5.               W-8050 Freising (Germany)
  6.  
  7.  
  8.  
  9. GALer ist ein GAL-Programmiergerät mit der dazu nötigen Software.
  10.  
  11. GALer V1.3 ist SHAREWARE. Falls Sie dieses Programm zusammen mit der
  12. Hardware gebrauchen können, senden Sie mir bitte 20,- DM zu.
  13. Den Schaltplan für die Hardware und ein Flußdiagramm über die Arbeits-
  14. weise des GAL-Assemblers erhalten Sie umgehend nach Erhalt der
  15. Shareware-Gebühr.
  16.  
  17.  
  18. Der Vertrieb von "GALer" über PD-Serien und Mailboxen ist erlaubt.
  19. Bedingung ist allerdings, daß dabei kein Gewinn gemacht wird und daß die
  20. einzelnen Files unverändert und vollständig kopiert bzw. "upgeloaded"
  21. werden.
  22. Falls Sie den GAL-Brenner nachgebaut haben, so dürfen Sie diesen einen zum
  23. Bauteilepreis auch verkaufen. Der kommerzielle Vertrieb ist NICHT gestattet.
  24. Der Schaltplan darf nur privat und KOSTENLOS weitergegeben werden.
  25.  
  26.  
  27.  
  28. Falls Sie "GALer" über einen PD-Händler bezogen haben und dafür mehr
  29. als 5 DM bezahlt haben, sollten Sie sich schnell einen neuen Händler
  30. suchen.
  31.  
  32.  
  33.  
  34. ACHTUNG!!! Die Programme "GALer" und "GALerTest" senden über den Parallel-
  35. Port des Amiga Daten. Das heißt: wenn Sie dort einen Drucker, Digitizer oder
  36. sonstiges angeschlossen haben, sollten Sie diesen entweder ausschalten
  37. oder abstecken, da es sonst unter Umständen zur Beschädigung des Gerätes
  38. kommen kann.
  39. Für eventuell entstehende Schäden durch die Hard- oder Software kann ich
  40. natürlich keine Verantwortung übernehmen. Die Hardware läuft auf meinem
  41. Amiga (Amiga 1000, 2.5 MByte, 2 Diskettenlaufwerke, A2000-Tastatur,
  42. 20 MByte Festplatte, Kickstart 1.3) seit einigen Monaten fehlerfrei.
  43. Ich habe meinen Prototypen genau nach den Schaltplan aufgebaut, den
  44. auch Sie bestellen können. Das heißt, daß der Schaltplan 100%ig fehlerfrei
  45. ist. Bei gewissenhaften Nachbau kann also eigentlich gar nichts schief gehen.
  46. Der Nachbau sollte aber dennoch nur von erfahreren Elektronik-Freaks durch-
  47. geführt werden (zumindest muß man Löterfahrung haben und Schaltpläne lesen
  48. können). Näheres zur Hardware können Sie im Kapitel III erfahren.
  49.  
  50.  
  51.  
  52. Hinweis:  Diese Anleitung dient lediglich der Einführung in die Materie
  53.       der GAL-Programmierung. Sie kann weiterführende Literatur (siehe
  54.       unten) nicht ersetzen.
  55.       Wenn Sie sich jedoch schon länger mit Digitaltechnik beschäftigen
  56.       und gar nicht wissen wollen wie ein GAL intern aufgebaut ist und
  57.       wie es genau funktioniert, dann müßte diese Anleitung zusammen
  58.       mit den Beispiel-"Listings" ausreichen, um GALs sinnvoll
  59.       einzusetzen.
  60.  
  61.  
  62.  
  63. Versionen:
  64.     V1.0:   Testversion
  65.     V1.1:   Intuition-Umgebung hinzugefügt
  66.     V1.2:   einige Fehler beseitigt
  67.     V1.3:   Fehler im GAL-Assembler beseitigt
  68.           /name.E ist jetzt nicht mehr erlaubt
  69.         Die Pinnamen des zu letzt assemblierten Files können an
  70.         das gezeichnete GAL angefügt werden.
  71.            
  72.  
  73.  
  74.  
  75. Inhaltsverzeichnis:
  76.  
  77.     Kapitel I    Einführung
  78.         I.1    Was sind GALs
  79.         I.2    Wie ist ein solches GAL aufgebaut?
  80.         I.3    Welche GALs gibt es?
  81.         I.4    Was kostet so ein Ding (GAL)?
  82.         I.5    Die Betriebsmodi eines GALs
  83.  
  84.     Kapitel II    Die Software
  85.         II.1    Die Eingabe-Datei
  86.         II.2    Das Programm "GALer"
  87.         II.3    Weitere Beispiele
  88.  
  89.     Kapitel III    Die Hardware
  90.         III.1    Programmierung von GALs
  91.         III.2    Schaltungsbeschreibung
  92.         III.3    Aufbau
  93.  
  94.     Anhang
  95.             Schlüsselwörter der Eingabe-Datei
  96.             Stückliste
  97.             Literaturhinweise
  98.  
  99.  
  100.  
  101.  
  102.  
  103. Kapitel I: Einführung
  104. =====================
  105.  
  106. I.1 Was sind GALs?
  107. ------------------
  108.  
  109. GALs (Generic Array Logic) sind programmierbare Logikbausteine. Durch
  110. entsprechende Programmierung durch den Anwender, können eine Vielzahl
  111. von Standardgatterfunktionen in einem IC, dem GAL, verwirklicht werden.
  112. Angenommen Sie benötigen für eine Digitalschaltung folgende Logikfunktionen:
  113.  - UND -Gatter mit 2 Eingängen
  114.  - ODER-Gatter mit 2 Eingängen
  115.  - NAND-Gatter mit 2 Eingängen
  116.  - NOR -Gatter mit 2 Eingängen
  117. Um diese Schaltung zu verwirklichen, sind vier (geht auch mit weniger)
  118. Standard-ICs erforderlich (74LS... bzw. 40..). Diese Funktionen lassen
  119. sich durch EINEN! GAL-Baustein ersetzen.
  120. Die Hauptaufgabe von GALs ist also die Vereinfachung von Digitalschaltungen,
  121. indem ein GAL (oder mehrere) eine Vielzahl von herkömmlichen Logik-Bau-
  122. steinen ersetzt. Ein GAL kann bei entsprechender Programmierung fast alle
  123. Logik-Funktionen ersetzen, wie z.B.: AND, OR, XOR, NAND, NOR, Inverter,
  124. FlipFlops, Decoder (vorallem Adressdecoder), Multiplexer, Zähler usw.
  125. Außerdem kann das GAL jederzeit neu programmiert werden, so daß sich
  126. Schaltungen nachträglich wesentlich einfacher ändern lassen.
  127.  
  128.  
  129.  
  130. I.2 Wie ist ein solches GAL aufgebaut?
  131. --------------------------------------
  132.  
  133. Kernstück eines GALs ist ein Matrix. Auf die Spalten dieser Matrix werden
  134. alle Eingänge invertiert und nicht invertiert zugeführt. Im unprogrammierten
  135. Zustand des GALs sind die Spalten und Zeilen miteinander verbunden. Jede
  136. dieser Verbindungen zwischen einer Zeile und einer Spalte entspricht einer
  137. UND-Verknüpfung. Durch Programmieren des GALs werden die entsprechenden
  138. UND-Verknüpfungen gelöscht, so daß sich die gewünschte Verknüpfung ergibt.
  139. Eine Zeile heißt Produktterm, da alle Eingänge (Spalten) deren Kreuzung
  140. mit einer Zeile noch existiert, eben UND-verknüpft werden.
  141. Jeweils acht dieser Zeilen (= Produktterme) werden über ein ODER-Gatter
  142. zu der sogenannten OLMC (Output Logic Macro Cell) geführt. Es können also
  143. acht Produktterme (Zeilen) miteinander ODER-verknüpft werden. Die OLMC
  144. ist eine "konfigurierbare Ausgangszelle".
  145.  
  146. Was bitte ist ein "konfigurierbare Ausgangszelle"?
  147. Ein GAL besitzt acht dieser  konfigurierbaren Ausgangszellen. Diese Ausgangs-
  148. zellen können entweder als Eingang, als kombinatorischer Ausgang,
  149. als Tristate-Ausgang oder als Register-Ausgang programmiert werden.
  150.  
  151. Kombinatorischer Ausgang: dieser Ausgang ist ständig aktiv
  152.               (entweder HIGH oder LOW)
  153. Tristate-Ausgang        : dieser Ausgang kann drei Zustände annehmen
  154.               HIGH, LOW und hochohmig
  155.               (hochohmig wäre mit dem Abklemmen des Pins zu
  156.               vergleichen)
  157.               Dies wird benötigt, wenn man mehrere Ausgänge
  158.               zusammenschalten will, dabei aber nur einer
  159.               dieser Ausgänge aktiv sein darf.
  160. Register-Ausgang    : Bei diesem Ausgang gelangt das Verknüpfungser-
  161.               gebnis der Eingänge nicht direkt an den Ausgang,
  162.               sondern über ein D-FlipFlop.
  163.               Erst bei einem Clock-Impuls gelangt das Ergebnis
  164.               zu dem entsprechenden Ausgang. Wenn /OE auf HIGH
  165.               liegt, geht der Ausgang in den hochohmigen
  166.               Zustand.
  167.  
  168.  
  169. Neben der Matrix gibt es in einem GAL noch mehrere "Bits":
  170. ( (n) bedeutet dabei, daß diese Bits für jeden Ausgang extra vorhanden sind)
  171.  
  172. XOR (n) : Mit diesem Bit kann das Ergebnis der Verknüpfung invertiert werden.
  173.       XOR (n) = 0 : Ausgang active LOW
  174.       XOR (n) = 1 : Ausgang active HIGH
  175.  
  176. SYN, AC0, AC1(n):
  177.       Mit diesen Bits wird bestimmt, in welchem Betriebsmodus sich das
  178.       GAL befinden soll. Im wesentlichen gibt es drei Betriebsmodi:
  179.  
  180.   Betriebsmodus 1:    SYN    = 1      AC0 = 0
  181.  
  182.             AC1(n) = 1 : OLMC als Eingang
  183.             AC1(n) = 0 : OLMC als kombinatorischer Ausgang
  184.  
  185.   Betriebsmodus 2:    SYN    = 1      AC0 = 1
  186.  
  187.             AC1(n) = 1 : Tristate-Ausgang
  188.  
  189.   Betriebsmodus 3:    SYN    = 0      AC0 = 1
  190.  
  191.             AC1(n) = 1 : OLMC als Tristate-Ausgang
  192.             AC1(n) = 0 : OLMC als Register-Ausgang
  193.  
  194.  
  195. PT0...63: (PT = Produkttermfreigabe) 
  196.       Diese Bits bestimmen, ob die Zeilen 0...63 in der Matrix
  197.       des GALs gültig sein sollen oder nicht.
  198.       PTx = 1: UND-Verknüpfung in der Zeile x sind gültig
  199.       PTx = 0: UND-Verknüpfungen in der Zeile x sollen nicht
  200.            berücksichtigt werden (haben also keine Auswirkung
  201.            auf den Ausgang)
  202.       (x = zwischen 0 und 63; in der Matrix gibt es 64 Zeilen,
  203.        so daß jede Zeile individuell aktiviert bzw. deaktiviert werden
  204.        kann)
  205.  
  206. Diese 82 Bits sind zum sogenannten Architektur-Kontroll-Wort (ACW) zu-
  207. sammengefaßt. Der Aufbau dieses ACW wird im Kapitel III näher beschrieben.
  208.  
  209.  
  210. Signatur:
  211.     Hier stehen acht Bytes für eigene Anwendungen zur Verfügung. 
  212.     In der Regel wird hier ein kleiner Kommentar oder die Versions-
  213.     nummer des GALs als ASCII-Text abgelegt.
  214.  
  215. Sicherheitszelle: (Security-Bit)
  216.     Durch setzen dieses Bits wird das GAL gegen unerlaubtes Kopieren
  217.     geschützt. Das Auslesen der Matrix ist nicht mehr möglich. Da
  218.     aber die restlichen Bits noch gelesen werden können, ist dieser
  219.     Schutz nicht sehr effektiv.
  220.  
  221. Bulk Erase:
  222.     Durch programmieren dieser Zelle wird das gesammte GAL gelöscht.
  223.     Ein GAL kann so ca. einhundertmal! neu programmiert werden.
  224.  
  225.  
  226.  
  227.  
  228. I.3 Welche GALs gibt es?
  229. ------------------------
  230.  
  231. Am gebräuchlichsten sind die Typen GAL16V8 und GAL20V8. Diese
  232. werden auch durch dieses GAL-Programmiergerät unterstützt.
  233. Pinbelegungen:
  234.  
  235. GAL16V8:
  236.                ---- ----
  237.      Eingang oder Clock   1|       |20  +5V
  238.         Eingang   2|       |19  konfigurierbare Ausgangszelle
  239.         Eingang   3|       |18  konfigurierbare Ausgangszelle
  240.         Eingang   4|       |17  konfigurierbare Ausgangszelle
  241.         Eingang   5|       |16  konfigurierbare Ausgangszelle
  242.         Eingang   6|       |15  konfigurierbare Ausgangszelle
  243.         Eingang   7|       |14  konfigurierbare Ausgangszelle
  244.         Eingang   8|       |13  konfigurierbare Ausgangszelle
  245.         Eingang   9|       |12  konfigurierbare Ausgangszelle
  246.             GND  10|       |11  Eingang oder /OE
  247.                    ---------
  248.  
  249. GAL20V8:
  250.                ---- ----
  251.      Eingang oder Clock   1|       |24  +5V
  252.         Eingang   2|       |23  Eingang
  253.         Eingang   3|       |22  konfigurierbare Ausgangszelle
  254.         Eingang   4|       |21  konfigurierbare Ausgangszelle
  255.         Eingang   5|       |20  konfigurierbare Ausgangszelle
  256.         Eingang   6|       |19  konfigurierbare Ausgangszelle
  257.         Eingang   7|       |18  konfigurierbare Ausgangszelle
  258.         Eingang   8|       |17  konfigurierbare Ausgangszelle
  259.         Eingang   9|       |16  konfigurierbare Ausgangszelle
  260.         Eingang  10|       |15  konfigurierbare Ausgangszelle
  261.         Eingang  11|       |14  Eingang
  262.             GND  12|       |13  Eingang oder /OE
  263.                    ---------
  264.  
  265.  
  266. Aus der Pinbelegung erkennt man, daß sich die beiden GAL-Typen GAL16V8
  267. und GAL20V8 nach Außen hin nur durch die Anzahl der Eingänge unterscheiden.
  268. So hängt die Wahl, ob man ein GAL16V8 oder GAL20V8 verwenden soll, nur von
  269. der Anzahl der benötigten Eingänge ab.
  270.  
  271.  
  272.  
  273.  
  274. I.4 Was kostet so ein Ding (GAL)?
  275. ---------------------------------
  276.  
  277. Das GAL16V8 kostet um die 5,- DM und das GAL20V8 um die 8,- DM
  278. (mit fallender Tendenz).
  279.  
  280.  
  281.  
  282.  
  283.  
  284. I.5 Die Betriebsmodi eines GALs
  285. -------------------------------
  286.  
  287. Wie unter I.2 bereits erwähnt wurde, bestimmen die Bits SYN, AC0 und
  288. AC1(n) in welchen Modus sich das GAL befindet. Von diesem Modus hängt
  289. die Pin-Belegung des GALs ab.
  290.  
  291.  
  292.  
  293. GAL16V8:
  294.  
  295. Betriebs-|Betriebs-|Betriebs-|           |Betriebs-|Betriebs-|Betriebs-|
  296. modus 1  |modus 2  |modus 3  |           |modus 1  |modus 2  |modus 3  |
  297. ------------------------------             -------------------------------
  298.      |       |             --- ---         |         |
  299.    E     |    E    |  Clock     1|     |20    +5V    |   +5V   |   +5V
  300.    E     |    E    |       E       2|     |19    E/K    |   T*    |  E/T/R  
  301.    E     |    E    |    E       3|     |18    E/K    |   E/T   |  E/T/R
  302.    E     |    E    |    E       4|     |17    E/K    |   E/T   |  E/T/R
  303.    E     |    E    |    E       5|     |16     K     |   E/T   |  E/T/R
  304.    E     |    E    |    E       6|     |15     K     |   E/T   |  E/T/R
  305.    E     |    E    |    E       7|     |14    E/K    |   E/T   |  E/T/R
  306.    E     |    E    |    E       8|     |13    E/K    |   E/T   |  E/T/R
  307.    E     |    E    |    E       9|     |12    E/K    |   T*    |  E/T/R
  308.   GND    |   GND   |   GND     10|     |11     E     |    E    |   /OE
  309.                  -------
  310.  
  311.  
  312.  
  313. GAL20V8:
  314.  
  315. Betriebs-|Betriebs-|Betriebs-|           |Betriebs-|Betriebs-|Betriebs-|
  316. modus 1  |modus 2  |modus 3  |           |modus 1  |modus 2  |modus 3  |
  317. ------------------------------             -------------------------------
  318.      |       |             --- ---         |         |
  319.    E     |    E    |  Clock     1|     |24    +5V    |   +5V   |   +5V
  320.    E     |    E    |       E       2|     |23     E     |    E    |    E  
  321.    E     |    E    |       E       3|     |22    E/K    |   T*    |  E/T/R  
  322.    E     |    E    |    E       4|     |21    E/K    |   E/T   |  E/T/R
  323.    E     |    E    |    E       5|     |20    E/K    |   E/T   |  E/T/R
  324.    E     |    E    |    E       6|     |19     K     |   E/T   |  E/T/R
  325.    E     |    E    |    E       7|     |18     K     |   E/T   |  E/T/R
  326.    E     |    E    |    E       8|     |17    E/K    |   E/T   |  E/T/R
  327.    E     |    E    |    E       9|     |16    E/K    |   E/T   |  E/T/R
  328.    E     |    E    |    E      10|     |15    E/K    |   T*    |  E/T/R
  329.    E     |    E    |    E      11|     |14     E     |    E    |    E
  330.   GND    |   GND   |   GND     12|     |13     E     |    E    |   /OE
  331.                  -------
  332.  
  333. Abkürzungen:  E  :  Eingang
  334.           K  :  kombinatorischer Ausgang
  335.           T  :  Tristate-Ausgang
  336.           T* :  Tristate-Ausgang ohne Rückkopplung auf die Matrix, was
  337.             nur heißt, daß dieser Ausgang nicht als Eingang ver-
  338.             wendet werden kann
  339.           R  :  Register-Ausgang
  340.           Clock: Takt für D-FlipFlops; nur für die Pins interessant,
  341.              die als Register-Ausgang programmiert sind
  342.           /OE  : Output Enable (low aktiv): aktiviert die Register-
  343.              ausgänge
  344.               (Erklärung der Begriffe siehe I.2)
  345.  
  346.  
  347.  
  348. Aus der Pinbelegung ist z.B. ersichtlich, daß die Pins 15 und 16 des
  349. GAL16V8 bzw. die Pins 18 und 19 des GAL20V8 nicht als Eingänge
  350. programmiert werden können, wenn sich das GAL im Betriebsmodus 1 be-
  351. findet. Das Gleiche gilt für die Pins 12 und 19 bzw. 15 und 22 für
  352. den Betriebsmodus 2. Im Betriebsmodus 1 sind die Pins 1 und 11 (GAL16V8)
  353. bzw. die Pins 1 und 13 (GAL20V8) für Clock und /OE reserviert. Diese
  354. Pins können also nicht wie in den anderen beiden Modi, als Eingänge
  355. verwendet werden.
  356.  
  357. Angenommen Sie benötigen für Ihr GAL zumindest einen Registerausgang.
  358. Dann ist bereits der Betriebsmodus 3 festgelegt.
  359. Wenn Sie aber mindestens einen Tristate-Ausgang benötigen und keinen
  360. Registerausgang, dann befindet sich das GAL im Betriebsmodus 2.
  361. Wenn Sie weder einen Tristate- noch einen Register-Ausgang benötigen,
  362. ist Betriebsmodus 1 zu verwenden.
  363.  
  364.  
  365.  
  366.  
  367.  
  368. Kapitel II: Die Software
  369. ========================
  370.  
  371. Im Prinzip können Sie fast das ganze Kapitel I wieder vergessen. Im
  372. Prinzip - wohlgemerkt. Was Sie sich unbedingt merken sollten, ist
  373. die Pinbelegung der GALs in den verschiedenen Modi. Dadurch lassen sich
  374. unnötige Fehler vermeiden. Die Bestimmung des Betriebsmodus und die
  375. anderen Parameter, die bei der GAL-Programmierung zu berücksichtigen
  376. sind, nimmt Ihnen die Software "GALer" ab.
  377.  
  378.  
  379. II.1 Die Eingabe-Datei
  380. ----------------------
  381.  
  382. Als erstes muß mit Hilfe eines Texteditors eine sogenannte Eingabe-Datei
  383. (Source-File) erstellt werden. Diese Datei muß folgende Informationen
  384. enthalten:
  385.   1. den GAL-Typ (GAL16V8 oder GAL20V8)
  386.   2. einen 8 Byte langen Text, der als Kommentar in das GAL geschrieben
  387.      werden soll (Signatur, siehe I.2)
  388.   3. die Pinnamen - hier werden den Pinnummern Namen zugewiesen, was
  389.      wesentlich anschaulicher ist
  390.   4. die Boole'schen Gleichungen
  391.   5. Das Schlüsselwort DESCRIPTION - nach diesem Wort kann ein beliebiger
  392.      Text stehen. Dieser Text beschreibt in der Regel die Funktion des
  393.      GALs. Dadurch weiß man auch nach Jahren noch, für was das GAL
  394.      eigentlich programmiert wurde.
  395.  
  396.  
  397. Bevor ich jetzt noch länger 'rum schwafle, hier ein BEISPIEL (freu, jubel).
  398.  
  399. Beispiel 1:
  400. Angenommen Sie benötigen für eine Schaltung folgende Gatter:
  401. - ein AND  mit 3 Eingängen
  402. - ein NAND mit 2 Eingängen
  403. - ein OR   mit 2 Eingängen
  404. - eine kleine Digitalschaltung in der die Ausgänge von 2 AND-Gattern
  405.   zu den Eingängen eines OR-Gatters führen
  406.  
  407. Schaltbilder:
  408.  
  409.     AND:                +----+            W = A * B * C
  410.               A ----|    |
  411.               B ----| &  |---- W
  412.               C ----|    |
  413.                     +----+
  414.  
  415.  
  416.     NAND:                +----+            /X = D * E
  417.               D ----|    |
  418.                     | &  |o--- X
  419.               E ----|    |
  420.                     +----+
  421.     OR:
  422.                     +----+            Y = F + G
  423.               F ----|    |
  424.                     | >1 |---- Y
  425.               G ----|    |
  426.                     +----+
  427.  
  428.     kleine Digital-            +----+            Z = H * I + J * K
  429.     schaltung:          H ----|    |
  430.                     | &  |----+
  431.               I ----|    |    |   +----+
  432.                     +----+    +---|    |
  433.                           | <1 |---- Z
  434.                     +----+    +---|    |
  435.               J ----|    |    |   +----+
  436.                     | &  |----+
  437.               K ----|    |
  438.                     +----+
  439.  
  440.  
  441.  
  442.   Legende: * : UND  - Verknüpfung
  443.            + : ODER - Verknüpfung
  444.        / : low aktiv
  445.  
  446.  
  447.  
  448. Um das Eingabe-File zu erstellen, ist zuerst der GAL-Typ zu bestimmen.
  449. Für die Verwirklichung der obigen Logik-Funktionen werden insgesamt 11
  450. Eingänge und 4 Ausgänge benötigt.
  451. Aus Kapitel I wissen wir (oder auch nicht), daß die Wahl des GALs, von
  452. der Anzahl der Eingänge abhängt. Die Anzahl der Eingänge wiederrum, hängt
  453. von dem Betriebsmodus ab (siehe unter I.5, Pinbelegung in den einzelnen
  454. Modi). Da weder Tristate- noch Register-Ausgänge verwendet werden, wird
  455. sich das GAL nach der Programmierung im Betriebsmodus 1 befinden.
  456. Daraus folgt, das GAL16V8 10 Eingänge und 8 konfigurierbare Ausgänge be-
  457. sitzt. Da wir nur 4 Ausgänge benötigen, könnten wir die Restlichen als
  458. Eingänge programmieren, so daß wir insgesammt die benötigten 11 Eingänge
  459. und 4 Ausgänge zur Verfügung haben. Daraus folgt, daß GAL16V8 für unsere
  460. Aufgabe ausreichend ist. GAL20V8 ginge zwar auch, es wären aber wesentlich
  461. mehr Eingänge unbenützt (Verschwendung).
  462.  
  463. Als zweites benötigen wir einen Text für die Signatur, der max. acht
  464. Zeichen lang sein darf - z.B. "Beispiel".
  465.  
  466. Als nächstes kommen die Pin-Definitionen. Hier werden einfach die Pins
  467. 1 bis 20 der Reihe nach mit ihrem Namen, aufgelistet. Nichtverwendete Pins
  468. müssen mit "NC" (not connected) gekennzeichnet werden, Masse mit GND und
  469. +5V mit VCC.
  470. Hier:    B  C   D   E   F  G  H  I  J  GND
  471.          K  NC  NC  NC  Z  Y  X  W  A  VCC     
  472.  
  473. Das heißt:    Pin  1 := B     Eingang
  474.           Pin  2 := C    Eingang
  475.           Pin  3 := D    Eingang
  476.           Pin  4 := E    Eingang
  477.           Pin  5 := F    Eingang
  478.           Pin  6 := G    Eingang
  479.           Pin  7 := H    Eingang
  480.           Pin  8 := I    Eingang
  481.           Pin  9 := J    Eingang
  482.           Pin 10 := GND
  483.           Pin 11 := K    Eingang
  484.           Pin 12 := NC    nicht verwendet
  485.           Pin 13 := NC    nicht verwendet
  486.           Pin 14 := NC    nicht verwendet
  487.           Pin 15 := Z    kombinatorischer Ausgang
  488.           Pin 16 := Y    kombinatorischer Ausgang
  489.           Pin 17 := X    kombinatorischer Ausgang
  490.           Pin 18 := W    kombinatorischer Ausgang
  491.           Pin 19 := A    (konfigurierbarer Ausgang als Eingang def.)
  492.           Pin 20 := VCC
  493.  
  494.                 GAL16V8
  495.                ---- ----
  496.                     B  1|       |20  VCC
  497.                C  2|       |19  A
  498.                D  3|       |18  W
  499.                E  4|       |17  X
  500.                F  5|       |16  Y
  501.                G  6|       |15  Z
  502.                H  7|       |14  NC
  503.                I  8|       |13  NC
  504.                J  9|       |12  NC
  505.              GND 10|       |11  K
  506.                    ---------
  507.  
  508.  
  509. Der nächste Punkt sind die Boole'schen Gleichungen. 
  510.  
  511.       W = A * B * C
  512.  
  513.     /X = D * E
  514.  
  515.      Y = F + G
  516.  
  517.      Z = H * I + J * K
  518.  
  519. Somit haben wir alle Dinge, die man für das Eingabe-File benötigt. Nun
  520. stellt sich aber die Frage wie dieses File aufgebaut ist:
  521.  
  522. In der 1. Zeile muß der GAL-Typ stehen. Hier "GAL16V8"
  523. In der 2. Zeile muß die Signatur stehen. Hier "Beispiel"
  524. Danach folgen die Pin-Definitionen:
  525.          B  C   D   E   F  G  H  I  J  GND
  526.          K  NC  NC  NC  Z  Y  X  W  A  VCC     
  527. dann die Boole'schen Gleichungen:
  528.       W = A * B * C
  529.     /X = D * E
  530.      Y = F + G
  531.      Z = H * I + J * K
  532. und das Schlüsselwort DESCRIPTION.
  533. Jetzt können Sie mit Hilfe eines Texteditors das Eingabe-File erstellen und
  534. mit beispiel.pld abspeichern. Dabei dürfen Sie den Anhang ".pld" nicht
  535. weglassen.
  536. So sollte das Eingabe-File schließlich aussehen:
  537. (**** kennzeichnet File-Anfang und File-Ende)
  538.  
  539. ******************************************************
  540. GAL16V8            hier darf ein Kommentar stehen
  541. Beispiel        hier darf ein Kommentar stehen
  542.  
  543. B  C   D   E   F  G  H  I  J  GND
  544. K  NC  NC  NC  Z  Y  X  W  A  VCC     
  545.  
  546.  
  547.  W = A * B * C
  548. /X = D * E
  549.  Y = F + G
  550.  Z = H * I + J * K
  551.  
  552. DESCRIPTION:
  553.  ab hier darf ein Kommentar stehen
  554. ******************************************************
  555.  
  556.  
  557. Wie erhält man aber jetzt aus dem Eingabe-File, das programmierte
  558. GAL? Dazu wird das Programm "GALer" benötigt.
  559.  
  560.  
  561.  
  562. II.2 Das Programm "GALer"
  563. -------------------------
  564.  
  565. "GALer" hat die Aufgabe mit Hilfe der Eingabe-Datei, ein programmiertes
  566. GAL zu erstellen.
  567. Zunächst die einzelnen Menüpunkte des Programms:
  568.  
  569.  
  570. Projekt:   Quit            GALer verlassen
  571.  
  572. GAL-Typ:   GAL16V8        hier kann der zu programmierende GAL-Typ
  573.        GAL20V8        eingestellt werden
  574.  
  575. GAL    :   löschen        GAL löschen
  576.        programmieren    GAL programmieren
  577.        kopieren        GAL kopieren
  578.        Leertest        testen, ob GAL leer ist
  579.        setze Security-Bit    das Security-Bit (siehe I.2) setzen
  580.  
  581. GAL-Assembler:
  582.        Jedec-Datei        soll Jedec-File erstellt werden?
  583.        Fuse-Matrix        soll Fuse-File erstellt werden?
  584.        Chip-Diagramm    soll Chip-Diagramm erstellt werden?
  585.        Pin-Belegung        soll Pin-Belegungs-File erstellt werden?
  586.        Datei assemblieren   Eingabe-Datei assemblieren
  587.  
  588. GAL-Disassembler:
  589.        Signatur lesen      Signatur eines GALs ausgeben
  590.        ACW lesen          Architektur-Kontroll-Wort ausgeben
  591.        Jedec-Datei erstellen  Jedec-Datei eines bereits programmierten
  592.                   GALs erstellen
  593.  
  594. GAL-Prüfer:
  595.        Pinnamen zeigen    Falls bereits eine Eingabe-Datei assembliert
  596.                 wurde und der eingestellte GAL-Typ mit
  597.                 dem Typ in der Eingabe-Datei übereinstimmt,
  598.                 so fügt diese Funktion die entsprechenden
  599.                 Pinnamen an das gezeichnete GAL an.
  600.  
  601.        Pinnamen löschen    löscht die Pinnamen am GAL wieder
  602.        Prüfmuster        programmiertes GAL auf Funktion über-
  603.                 prüfen - nähere Beschreibung siehe unten
  604.  
  605.  
  606. Um ein GAL zu programmieren, muß zunächst das Eingabe-File in das so-
  607. genannte Jedec-File umgewandelt werden. Diese Aufgabe übernimmt der
  608. GAL-Assembler. Das Jedec-File (Endung ".jed") ist ein "Text"-File in dem
  609. sämtliche Bits die in einem GAL gesetzt werden können, der Reihe nach auf-
  610. gelistet sind. Den Zustand der Bits (0 oder 1) ermittelt der GAL-Assembler
  611. aus der Eingabe-Datei. Neben dem Jedec-File kann der GAL-Assembler noch drei
  612. weiter Files generieren. Diese Files dienen aber lediglich der Dokumen-
  613. tation. Das Fuse-File (Endung ".fus") zeigt den Zustand der Bits in der
  614. Logik-Matrix. Das Chip-Diagramm (Endung ".chp") zeigt den Anschlußplan des
  615. GALs und das Pin-Belegungs-File (Endung ".pin") listet alle Pins auf und
  616. zeigt, ob diese als Eingang oder Ausgang programmiert sind. Die Files können
  617. von einem beliebigen Texteditor gelesen und eventuell nachbearbeitet werden.
  618. Bei der Eingabe von Filenamen in "GALer" ist zu beachten, daß die Endungen
  619. (".jed", ".chp", ".pin", ".pld") der einzelnen File-Typen (Jedec-, Chip-,
  620. Pin-, Eingabe-File) NICHT mit angegeben werden dürfen.
  621.  
  622. Nachdem der GAL-Assembler aus der Eingabe-Datei (Source-File) das Jedec-
  623. File erstellt hat kann das GAL mit Hilfe dieses Jedec-Files, programmiert
  624. werden. Dazu wählt man einfach "programmieren" an und gibt den File-Namen
  625. des Jedec-Files ein (ohne die Endung ".jed"!!!). Sobald das GAL dann
  626. programmiert ist erscheint ein Requester, der einen darauf aufmerksam
  627. macht, daß das GAL jetzt programmiert ist und aus der Fassung genommen
  628. werden kann.
  629.  
  630. Vorgehensweise bei der Programmierung von GALs:
  631.   1. mit Texteditor das Eingabe-File erstellen ("name.pld")
  632.   2. Eingabe-File assemblieren -> Jedec-File ("name.jed")
  633.   3. GAL-Typ einstellen (GAL16V8 oder GAL20V8)
  634.   4. GAL in die Fassung einsetzen
  635.   5. "Leertest" anwählen
  636.      Wenn das GAL nicht leer ist, muß es durch Anwählen von "löschen"
  637.      zuerst gelöscht werden, bevor es programmiert werden kann.
  638.   6. "programmieren" anwählen
  639.   7. GAL aus der Fassung entfernen  -  fertig
  640.  
  641.  
  642. Nachdem das GAL programmiert wurde stellt sich immer die Frage, ob sich
  643. das GAL auch so verhält, wie man es sich eigentlich vorgestellt hat.
  644. Dazu gibt es einen GAL-Prüfer. Um ein GAL auf seine Funktion hin zu über-
  645. prüfen, muß es natürlich zuerst wieder in die Fassung gesteckt werden und
  646. gegebenenfalls der GAL-Typ wieder richtig eingestellt werden.
  647. Jetzt kann der Menüpunkt "GAL-Prüfer - Prüfmuster" angewählt werden.
  648. In der Mitte des Screens sehen Sie symbolisch ein GAL abgebildet. Im GAL
  649. selbst, sind einige 'E's und 'A's zu sehen. Das 'E' steht für Eingang und
  650. das 'A' für Ausgang. Das 'A' ist ein Gadget. Durch Anklicken wird das 'A'
  651. zu einem 'E' und durch nochmaliges Anklicken wieder zu einem 'A'. Das heißt,
  652. Sie können bestimmen, ob dieser Pin als Eingang oder als Ausgang behandelt
  653. werden soll. Falls ein Pin ein Eingang ist, kann durch ein weiteres Gadget
  654. bestimmt werden ob der Eingang auf "High" ('H') oder auf "Low" ('L') ge-
  655. legt werden soll. Die Ausgänge sind blau umrandet. 
  656. Ein Ausgang kann drei Zustände annehmen: 'H' (High), 'L' (Low) und 'Z'
  657. (hochohmig).
  658.  
  659. Wenn Sie das GAL aus dem obigen Beispiel verwenden, muß zunächst Pin 19
  660. (="A") durch Anklicken von 'A' (das bei Pin 19), als Eingang definiert
  661. werden, da dieser Pin im obigen Beispiel eben als Eingang programmiert
  662. wurde.
  663. Die Eingänge des AND-Gatters sind: Pin 19 (="A"), Pin 1 (="B"), Pin 2 (="C")
  664. Der Ausgang ist Pin 18 (="W"). Wenn Sie jetzt die Eingänge des AND-Gatters
  665. durch Anklicken der Pegel-Gadgets auf HIGH legen, so muß der Ausgang (=Pin 18)
  666. ebenfalls auf HIGH gehen. Tut er das nicht oder geht der Ausgang auch bei
  667. anderen Kombinationen als bei "A"=HIGH, "B"=HIGH, "C"=HIGH auf HIGH, so
  668. liegt wahrscheinlich ein Fehler in der Eingabe-Datei vor. Diese sollte
  669. dann nocheinmal überprüft und gegebenenfalls korrigiert werden. Wurde ein
  670. Fehler gefunden, so muß das GAL zuerst gelöscht werden bevor es neu
  671. programmiert werden kann (ein GAL kann bis zu einhundertmal gelöscht und
  672. neu programmiert werden).
  673. Auf diese Art und Weise läßt sich das gesamte GAL überprüfen. Wenn das GAL
  674. vollständig getestet wurde und kein Fehler gefunden wurde, so kann es in
  675. die Schaltung eingebaut werden.
  676.  
  677.  
  678.  
  679.  
  680.  
  681. II.3 Weitere Beispiele
  682. ----------------------
  683.  
  684. Als nächstes möchte ich ein Beispiel zu Tristate-Ausgängen bringen.
  685.  
  686.  
  687.       /A ---------+
  688.         |\|
  689.         | \
  690.        B -------|  +------------------------ Y1
  691.         | /                
  692.         |/                
  693.                   VCC
  694.                    |
  695.             +----+         |\|
  696.        C -------|    |         | \
  697.             | >1 |-----------|  +------- Y2
  698.        D -------|    |         | /
  699.             +----+         |/
  700.  
  701.  
  702.             +----+
  703.        E -------|    |
  704.             | &  |------+
  705.        F -------|    |      |
  706.             +----+      |
  707.               |\|
  708.                           | \
  709.        G -----------------|  +o------------- Y3
  710.               | /
  711.                       |/
  712.  
  713. Y1 soll nur dann den Zustand von "B" annehmen, wenn "A" = LOW ist.
  714. Y2 soll ständig aktiv sein (entweder H oder L - abhängig von "B" und "C").
  715. Dies entspricht einem "kombinatorischen" Ausgang.
  716. Y3 soll nur dann aktiv sein, wenn "D" UND "E" = HIGH sind. 
  717.  
  718.                 GAL16V8
  719.  
  720.                ---- ----
  721.                     A  1|       |20  VCC
  722.                B  2|       |19  Y1
  723.                C  3|       |18  Y2
  724.                D  4|       |17  Y3
  725.                E  5|       |16  NC
  726.                F  6|       |15  NC
  727.                G  7|       |14  NC
  728.               NC  8|       |13  NC
  729.               NC  9|       |12  NC
  730.              GND 10|       |11  NC
  731.                    ---------
  732.  
  733.  
  734. Im Eingabe-File werden die Tristate-Ausgänge durch ein ".T" gekennzeichnet.
  735. Die Tristate-Freigabe erfolgt anschließend mit einem ".E". Fehlt die
  736. Tristate-Freigabe, so wird ständige Freischaltung angenommen (=VCC).
  737. Tristate-Freigabe = GND entspricht ständigem Sperren (=hochohmig).
  738. Achtung: Bei Tristate-Ausgängen können maximal sieben Produktterme verwendet
  739. werden (bei allen anderen Ausgangsarten sind es maximal acht).
  740. In der Tristate-Freigabe darf nur EIN Produktterm verwendet werden (kein OR).
  741.  
  742. Das Eingabe File sieht wie folgt aus:
  743. ******************************************************
  744. GAL16V8
  745. Bsp.2
  746.  
  747. A  B  C  D  E  F  G  NC NC GND
  748. NC NC NC NC NC NC Y3 Y2 Y1 VCC
  749.  
  750.  
  751. Y1.T = B
  752.  
  753. Y2.T = C + D
  754.  
  755. Y3.T = /G
  756.  
  757.  
  758. Y1.E = /A
  759.  
  760. Y3.E = E * F
  761.  
  762.  
  763. DESCRIPTION
  764. ******************************************************
  765.  
  766.  
  767.  
  768.  
  769. Als letztes Beispiel wird die Verwendung von Register-Ausgängen gezeigt.
  770. Das Beispiel stammt aus dem Buch "Programmable Logic Manual - SGS Thomson".
  771. Zunächst die Pin-Belegung:
  772.  
  773.                 GAL20V8
  774.  
  775.                ---- ----
  776.          (Input)       Clock  1|       |24  VCC
  777.     (Input)          D0  2|       |23  CARRYIN        (Input)
  778.     (Input)          D1  3|       |22  Q0        (Output)
  779.     (Input)          D2  4|       |21  Q1        (Output)
  780.     (Input)          D3  5|       |20  Q2        (Output)
  781.     (Input)          D4  6|       |19  Q3        (Output)
  782.     (Input)          D5  7|       |18  Q4        (Output)
  783.     (Input)          D6  8|       |17  Q5        (Output)
  784.     (Input)          LD  9|       |16  Q6        (Output)
  785.     (Input)         CLR 10|       |15  CARRYOUT    (Output)
  786.              11|       |14
  787.              GND 12|       |13  /OE
  788.                    ---------
  789.  
  790. Da Register verwendet werden heißt das, daß sich das GAL im Betriebs-
  791. modus 3 befindet. Dies bedeutet, daß die Pins 1 und 13 für Clock und
  792. /OE reserviert sind. Wenn /OE auf HIGH liegt, so gehen alle Register-
  793. ausgänge (Q0-Q6) auf "hochohmig" (=Z). Wenn CARRYIN = HIGH ist und 
  794. am Clock-Eingang ein LOW-HIGH-Impuls ankommt, so wird der Binärwert an
  795. den Ausgängen um eins erhöht. Wenn CLR = HIGH ist und ein Clock-Impuls
  796. (LOW-HIGH) anliegt, so werden die Ausgänge wieder auf 0 zurückgesetzt.
  797. Durch die Eingänge D0-D6 kann der Zähler vorgeladen werden. Durch
  798. LD = HIGH und einem Clock-Impuls werden die Werte von D0-D6 in Q0-Q6
  799. übernommen. Mit CARRYOUT und CARRYIN können mehrere dieser Zähler hinter-
  800. einander geschalten werden.
  801.  
  802.  
  803. Im Eingabe-File werden Register-Ausgänge mit ".R" gekennzeichnet.
  804. Es sind maximal acht Produktterme pro Register-Ausgang erlaubt.
  805.  
  806. ******************************************************
  807. GAL20V8
  808. 7BITCNTR        7-Bit-Counter
  809.  
  810. Clock D0 D1       D2 D3 D4 D5 D6 LD CLR NC      GND
  811. /OE   NC CARRYOUT Q6 Q5 Q4 Q3 Q2 Q1 Q0  CARRYIN VCC
  812.  
  813.  
  814. Q0.R =  /CLR * D0 * LD
  815.       + CARRYIN * /CLR * /LD * /Q0
  816.  
  817. Q1.R =  /CLR *  D1 *  LD
  818.       + /CLR * /LD * /Q0 * Q1
  819.       + CARRYIN * /CLR * /LD * Q0 * /Q1
  820.  
  821. Q2.R =  /CLR *  D2 *  LD
  822.       + /CLR * /LD * /Q0 * Q2
  823.       + /CLR * /LD * /Q1 * Q2
  824.       + CARRYIN * /CLR * /LD * Q0 * Q1 * /Q2
  825.  
  826. Q3.R =  /CLR *  D3 *  LD
  827.       + /CLR * /LD * /Q0 * Q3
  828.       + /CLR * /LD * /Q1 * Q3
  829.       + /CLR * /LD * /Q2 * Q3
  830.       + CARRYIN * /CLR * /LD * Q0 * Q1 * Q2 * /Q3
  831.  
  832. Q4.R =  /CLR *  D4 *  LD
  833.       + /CLR * /LD * /Q0 * Q4
  834.       + /CLR * /LD * /Q1 * Q4
  835.       + /CLR * /LD * /Q2 * Q4
  836.       + /CLR * /LD * /Q3 * Q4
  837.       + CARRYIN * /CLR * /LD * Q0 * Q1 * Q2 * Q3 * /Q4
  838.  
  839. Q5.R =  /CLR *  D5 *  LD
  840.       + /CLR * /LD * /Q0 * Q5
  841.       + /CLR * /LD * /Q1 * Q5
  842.       + /CLR * /LD * /Q2 * Q5
  843.       + /CLR * /LD * /Q3 * Q5
  844.       + /CLR * /LD * /Q4 * Q5
  845.       + CARRYIN * /CLR * /LD * Q0 * Q1 * Q2 * Q3 * Q4 * /Q5
  846.  
  847. Q6.R =  /CLR *  D6 *  LD
  848.       + /CLR * /LD * /Q0 * Q6
  849.       + /CLR * /LD * /Q1 * Q6
  850.       + /CLR * /LD * /Q2 * Q6
  851.       + /CLR * /LD * /Q3 * Q6
  852.       + /CLR * /LD * /Q4 * Q6
  853.       + /CLR * /LD * /Q5 * Q6
  854.       + CARRYIN * /CLR * /LD * Q0 * Q1 * Q2 * Q3 * Q4 * Q5 * /Q6
  855.  
  856. CARRYOUT.T = CARRYIN * /LD * Q0 * Q1 * Q2 * Q3 * Q4 * Q5 * Q6
  857.  
  858.  
  859. DESCRIPTION
  860. ******************************************************
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873. Kapitel III: Die Hardware
  874. =========================
  875.  
  876. III.1 Programmierung von GALs
  877. -----------------------------
  878.  
  879. Als erstes stellt sich natürlich die Frage wie ein GAL programmiert
  880. werden kann, wenn doch bereits alle Pins belegt sind und keine Pins
  881. für die Programmierung mehr frei sind. Legt man am Pin 2 eines GALs
  882. jedoch 16.5 V an, so ändert sich die Pinbelegung.
  883.  
  884. 16.5 V an Pin 2 =>
  885.                   GAL16V8
  886.  
  887.                 ---- ----
  888.                   VIL   1|       |20  +5V
  889.             EDIT   2|       |19  P,/V
  890.             RAG1   3|       |18  RAG0
  891.             RAG2   4|       |17  VIL
  892.             RAG3   5|       |16  VIL
  893.             RAG4   6|       |15  VIL
  894.             RAG5   7|       |14  VIL
  895.             SCLK   8|       |13  VIL
  896.             SDIN   9|       |12  SDOUT
  897.              GND  10|       |11  /STR
  898.                     ---------
  899.  
  900.  
  901.                  GAL20V8
  902.  
  903.                 ---- ----
  904.                      VIL   1|       |24  +5V
  905.             EDIT   2|       |23  VIL
  906.             RAG1   3|       |22  P,/V
  907.             RAG2   4|       |21  RAG0
  908.             RAG3   5|       |20  VIL
  909.              VIL   6|       |19  VIL
  910.              VIL   7|       |18  VIL
  911.             RAG4   8|       |17  VIL
  912.             RAG5   9|       |16  VIL
  913.             SCLK  10|       |15  SDOUT
  914.                 SDIN  11|       |14  VIL
  915.              GND  12|       |13  /STR
  916.                     ---------
  917.  
  918.  
  919. Ob das GAL programmiert oder ausgelesen werden soll, hängt vom
  920. Pegel von P,/V ab. Ein HIGH bedeutet programmieren, ein LOW lesen.
  921. An den Pins RAG0-RAG5 wird die zu lesende/programmierende Adresse
  922. angelegt.
  923. Das Programmieren geschieht wie folgt: Nach Anlegen der Adresse an
  924. RAG0-RAG5, müssen die zu schreibenden Bits an SDIN (seriell) angelegt und
  925. durch einen LOW-HIGH-Impuls an SCLK in ein internes Schieberegister getaktet
  926. werden. Ein LOW-Impuls am /STR-Pin programmiert schließlich die adressierte
  927. Zelle. Der Impuls muß eine Dauer von 10ms haben. Dies wiederholt man solange,
  928. bis das gesamte GAL programmiert ist.
  929. Das Auslesen eines GALs geschieht ähnlich: Nach Anlegen der Adresse an
  930. RAG0-RAG5 werden die Bits der entsprechenden Adresse durch einen LOW-Impuls
  931. an /STR, in das interne Schieberegister geholt. Durch LOW-HIGH-Impulse an
  932. SCLK werden die einzelnen Bits aus dem Schieberegister zu SDOUT getaktet.
  933. Die Bit-Breite einer Adresse bestimmt die Anzahl der SCLK-Impulse, die
  934. nötig sind, um die Adresse vollständig zu programmieren bzw. auszulesen.
  935. Die interne Organisation der GALs (Adressen der Zeilen) sieht wie folgt aus:
  936.  
  937.  
  938. GAL16V8:
  939. Adresse                         Breite
  940.  
  941.  0-31        Fuse-Matrix            jeweils 64 Bit
  942.    32        Signatur            64 Bit
  943. 33-59        reservierter Bereich        jeweils 64 Bit
  944.    60        Architektur-Kontroll-Wort ACW    82 Bit
  945.    61        Sicherheitszelle
  946.    62        reserviert
  947.    63        Bulk Erase
  948.  
  949.  
  950. GAL20V8:
  951. Adresse                         Breite
  952.  
  953.  0-39        Fuse-Matrix            jeweils 64 Bit
  954.    40        Signatur            64 Bit
  955. 41-59        reservierter Bereich        jeweils 64 Bit
  956.    60        Architektur-Kontroll-Wort ACW    82 Bit
  957.    61        Sicherheitszelle
  958.    62        reserviert
  959.    63        Bulk Erase
  960.  
  961.  
  962. Das Architektur-Kontroll-Wort hat folgenden Aufbau (82 Bit breit):
  963. GAL16V8:
  964. Bits  0-31: 32 Bit Produkttermfreigabe 0-31
  965. Bits 32-35: 4 Bit XOR(n) für OLMC-Pins 19-16
  966. Bit     36: AC0-Bit
  967. Bits 37-44: 8 Bit AC1(n) für OLMC-Pins 19-12
  968. Bit     45: SYN-Bit
  969. Bits 46-49: 4 Bit XOR(n) für OLMC-Pins 15-12
  970. Bits 50-81: 32 Bit Produkttermfreigabe 32-63
  971.  
  972. GAL20V8:
  973. Bits  0-31: 32 Bit Produkttermfreigabe 0-31
  974. Bits 32-35: 4 Bit XOR(n) für OLMC-Pins 22-19
  975. Bit     36: AC0-Bit
  976. Bits 37-44: 8 Bit AC1(n) für OLMC-Pins 22-15
  977. Bit     45: SYN-Bit
  978. Bits 46-49: 4 Bit XOR(n) für OLMC-Pins 18-15
  979. Bits 50-81: 32 Bit Produkttermfreigabe 32-63
  980.  
  981.  
  982.  
  983. III.2 Schaltungsbeschreibung
  984. ----------------------------
  985. Im folgenden Abschnitt werde ich auf die Funktionsweise meines GAL-
  986. Progammiergerätes eingehen. Dabei werde ich mich auf den Schaltplan
  987. beziehen. Sollten Sie diesen noch nicht besitzen, so können Sie diesen
  988. Abschnitt überspringen.
  989. Die Hardware wird am Parallelport des Amiga angeschlossen. Die verwendeten
  990. Datenleitungen sind dabei D0-D4 und die BUSY-Leitung.
  991. IC1, IC3, IC4 und IC5 sind achtstufige "seriell ein/parallel aus" Schiebe-
  992. register. Die Ausgänge der Schieberegister von IC3, IC4 und IC5 führen zu
  993. der Textool-Fassung für das GAL. Dadurch ist es möglich an jedem Pin
  994. (außer VCC und GND) des GALs, einen beliebigen Pegel (HIGH oder LOW)
  995. anzulegen. Die möglichen Ausgänge des GALs (Pin 14 bis 22) können über IC7
  996. und IC6a ausgelesen werden. IC7 ist ein achtstufiges "parallel ein/seriell
  997. aus" Schieberegister.
  998. IC1 ist sozusagen die Schaltzentrale. Dieses IC steuert IC3, 4 und 5 (OE).
  999. Desweiteren werden über dieses IC die Spannungen für das GAL (VCC, Edit-
  1000. Spannung) ein- bzw. ausgeschalten.
  1001. Damit die ICs 1, 3, 4, 5, 7 individuell angesprochen werden können, ist für
  1002. jedes dieser ICs eine eigene Takt-Leitung (Clk) vorhanden. Diese Clock-
  1003. Leitungen werden über IC2, einen 1-aus-4-Decoder, aus den Datenleitungen D0
  1004. und D1 des Parallelports erzeugt. D3 bestimmt ob gelesen (low) oder ge-
  1005. schrieben (high) werden soll. Dabei ist folgendes zu beachten: D3 darf nur
  1006. dann low werden, wenn durch D0 und D1 das IC, das angesprochen werden
  1007. soll, bereits selektiert ist. Ansonsten bekommt ein IC einen ungewollten
  1008. Clock-Impuls und beim nächsten Strobe-Impuls (D2) liegen dann die falschen
  1009. (um eins nach links geschobenen) Daten an den Ausgängen an.
  1010. Der Strobe-Impuls für die Schieberegister wird aus D2 gewonnen. Wenn D2
  1011. auf high geht, werden die Daten in den Schieberegistern in die Ausgangs- 
  1012. register der ICs 1, 3, 4, 5 übernommen. Bei IC7 bewirkt ein D2 = high,
  1013. daß die Daten an den Pins P1-P8 in das interne Schieberegister über-
  1014. nommen werden und anschließend durch entsprechende Clock-Impulse über
  1015. BUSY ausgelesen werden können.
  1016. Über D4 gelangen die einzelnen Bits vom Amiga zum GAL-Brenner.
  1017. Da an den Pins 2 und 4 der Textool-Fassung die Edit-Spannung von 16.5 Volt
  1018. angelegt werden kann, muß IC4 durch die Dioden D2 und D3 vor Überspannung
  1019. geschützt werden. Die Edit-Spannung wird von IC9, einem frequenzgesteuerten
  1020. Sperrwandler, erzeugt. Die Spannung kann über den Spindeltrimmer R16 exakt
  1021. eingestellt werden.
  1022. Das Relais K1 legt die Versorgungsspannung des GALs auf Pin 24 des Textool-
  1023. Sockels. Relais K2 legt entweder den Ausgang Q7 von IC3 oder +5V Ver-
  1024. sorgungsspannung (je nach GALTyp) an Pin 22 des Textool-Sockels. Beide
  1025. Relais werden über IC1 angesteuert.
  1026. Die LED zeigt an, ob am Textool-Sockel eine Spannung anliegt oder nicht.
  1027. Wenn die LED an ist, so darf weder ein GAL in die Fassung gesteckt, noch aus
  1028. der Fassung heraus genommen werden.
  1029.  
  1030. Zusammenfassung:
  1031.  
  1032. Parallel-Port:
  1033.  D0-D1:  Selektion der einzelnen ICs über Clk
  1034.  D2:     Strobe-Impuls für IC 1, 3, 4, 5
  1035.  D3:     schreiben = low, lesen = high
  1036.  D4:     Datenleitung für "Bits schreiben"
  1037.  BUSY:     Datenleitung für "Bits lesen"
  1038.  
  1039. IC1:    Q1    16.5V aufbauen (noch nicht anlegen!)
  1040.     Q2    an Pin 2 Edit-Spannung für GAL20V8 anlegen
  1041.     Q3    an Pin 4 Eidt-Spannung für GAL16V8 anlegen
  1042.     Q5    Vcc anlegen
  1043.     Q6    OE für IC3, 4, 5
  1044.     Q7    steuert LED an : high = on, low = off
  1045.     Q8    unbenützt
  1046.  
  1047. IC3:    Q1-Q8    Pin 16-23 des Textool-Sockels über R3-R8
  1048.  
  1049. IC4:    Q1-Q8    Pin 1-8 des Textool-Sockels
  1050.  
  1051. IC5:    Q1-Q3    Pin 9-11 des Textool-Sockels
  1052.     Q4    Pin 13 des Textool-Sockels
  1053.     Q5-Q6    Pins 14, 15 des Textool-Sockels über R9, R10
  1054.  
  1055. IC6:    a    Pin 13 des Textool-Sockels lesen
  1056.     b    IC7 auslesen
  1057.  
  1058. IC7:    P1-P8    Pin 14-21 des Textool-Sockels lesen
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064. III.3 Aufbau
  1065. ------------
  1066. Im Anhang finden Sie die Stückliste. Die Kosten für die Bauteile (ohne
  1067. Platine und Textool-Sockel) dürften um die 40 DM liegen. Wenn Sie sich
  1068. den Textool-Sockel sparen wollen (ca. 20 DM), können Sie auch eine normale
  1069. 24polige IC-Fassung verwenden. Da der Abstand der Pinreihen aber zu groß ist,
  1070. müssen Sie die Querverbindungen zwischen den Pinreihen aufsägen, sauber
  1071. abfeilen und anschließend die beiden Pinreihen im entsprechenden Abstand
  1072. einlöten. Als IC-Fassungen sollten Sie nur Präzisions-Fassungen verwenden.
  1073.  
  1074. Die 25polige Sub-D-Buchse (A1000) bzw. der Sub-D-Stecker (sonstige Amiga
  1075. Modelle) wird wie folgt beschaltet:
  1076.  
  1077.   D0   = Pin 2
  1078.   D1   = Pin 3
  1079.   D2   = Pin 4
  1080.   D3   = Pin 5
  1081.   D4   = Pin 6
  1082.   BUSY = Pin 11
  1083.  
  1084. Die Spannungsversorgung (+5V und Masse (GND)) müssen Sie sich entweder vom
  1085. Expansion-Port des Amiga holen oder von einem externen Netzteil (das auf 5V
  1086. stabilisiert ist!). Der GAL-Brenner hat eine maximale Stromaufnahme von
  1087. ca. 220 mA. Wer seinen Amiga nicht gerade voll ausgebaut hat, der kann die
  1088. +5V auch vom Parallel-Port holen. Allerdings - dieser ist beim A1000 für nur
  1089. 100 mA ausgelegt (A500 noch weniger, A2000 und A3000 mehr). Dies hat aller-
  1090. dings den Vorteil, daß keine zusätzlichen Kabel herum liegen. Ich habe mich
  1091. für diese Variante entschlossen und bis jetzt hat sich mein A1000 nicht in
  1092. Rauch aufgelöst. Aber Vorsicht, wie schon gesagt, beim A500 oder einem voll
  1093. ausgabauten A2000, A3000...  kann das schon wieder ganz anders aussehen.
  1094.  
  1095. Also für mutige:
  1096.  
  1097.   VCC (+5V) =     A1000             : Pin 23
  1098.          A500, A2000, A3000 usw. : Pin 14
  1099.   GND       =     A1000             : Pin 14
  1100.          A500, A2000, A3000 usw. : Pin 17
  1101.  
  1102. Das Hauptproblem beim Aufbau des GAL-Brenners ist wahrscheinlich die Platine.
  1103. Da die wenigsten in der Lage seine dürften eine doppelseitige, durch-
  1104. kontaktierte Platine herzustellen, ist die beste Lösung die, daß man
  1105. die Schaltung mit Hilfe der Fädeltechnik auf eine einseitige Euro-Loch-
  1106. rasterplatine aufbaut. Dazu werden die Bauteile einfach auf die Platine
  1107. gelötet und anschließend durch dünne Drähte miteinander verbunden.
  1108. Wenn das Ganze auch einen einigermaßen sauberen Eindruck machen soll,
  1109. kann man auch Fädelleisten (Verdrahtungskämme) verwenden. Entlang dieser
  1110. Leisten können die Drähte dann geführt werden, so daß nicht alles drunter
  1111. und drüber geht. Wer die Fädeltechnik noch nicht kennt, der kann sie sich
  1112. ja einmal im Fachgeschäft erklären lassen. Mit dieser Technik hab' ich
  1113. meinen GAL-Brenner und etliche andere Projekte aufgebaut (unter anderem
  1114. einen Einplatinen-Computer auf 68000er-Basis).
  1115. Einen Vorschlag zur Anordnung der Bauteile auf der Platine, schicke ich
  1116. mit dem Schaltplan mit.
  1117.  
  1118. Wenn Sie die Schaltung aufgebaut und an den Amiga angeschlossen haben
  1119. und dieser NICHT explodiert ist, können Sie das Testprogramm "GALerTest"
  1120. starten. Das Programm legt verschiedene Pegel an die Pins der Textool-Fassung,
  1121. die Sie mit einem Meßgerät überprüfen können. Die Programmierspannung
  1122. von +16.5 V kann mit dem Spindeltrimmer R16 eingestellt werden.
  1123.  
  1124. NICHT VERGESSEN: Programmierspannung von +16.5 V einstellen (mit Spindel-
  1125.          trimmer R16), sonst funktioniert der GAL-Brenner NICHT!!!!
  1126.          ("GALerTest" starten und bis zum entsprechenden Testpunkt
  1127.          durchklicken)
  1128.  
  1129. Falls sich Ihr GAL-Brenner genau so verhält wie es das Testprogramm ver-
  1130. langt, können Sie probeweise ein GAL brennen und mit dem GAL-Prüfer über-
  1131. prüfen. Wenn es funktioniert, dann dürfte in der Hardware kein Fehler
  1132. sein. GALs vom Typ GAL16V8 müssen so in die Textool-Fassung gesteckt werden,
  1133. daß Pin 1 des GALs mit Pin 3 der Fassung übereinstimmt. Bei GALs vom Typ
  1134. GAL20V8 muß Pin 1 des GALs mit Pin 1 der Fassung übereinstimmen.
  1135.  
  1136.  
  1137. Noch eine Anregung: Die Hardware des GAL-Brenners ist so ausgelegt, daß
  1138. sie auf allen Computern mit Centronics-Port läuft. Es muß sich nur noch
  1139. jemand finden lassen, der die Software auf den entsprechenden Computer
  1140. (MS-Dosen, Atari ST, Mac, Archimedes, NeXT, Sun, Cray, Suprenum, ...)
  1141. (größenwahnsinnig werd) umschreibt. Voraussetzung ist allerdings, daß
  1142. die umgeschriebene Software Shareware (Gebühr max. 30 DM) oder PD ist und
  1143. daß auf mein Copyright auf die Hardware und Amiga-GALer-Software hingewiesen
  1144. wird. Übrigens, wenn jemand Lust hat das ganze Gesülze ins Englische zu über-
  1145. sezten, so kann er das gerne tun und mir zukommen lassen. Dann haben auch
  1146. die außerhalb von "Good Old Germany" etwas von dem Projekt.
  1147.  
  1148.  
  1149.  
  1150. Tja, das war's dann wohl. Tschau und viel Spaß mit den putzigen GALs.
  1151.  
  1152.  
  1153.  
  1154. P.S.: hat mein Auto 60 - Falls sich zeigt, daß dieser GAL-Brenner
  1155.       einigermaßen angekommen ist (und sich die Klagen über zerfetzte
  1156.       Amigas in Grenzen halten), werde ich mich aufraffen und auch
  1157.       einige meiner anderen Projekte als Public-Domain oder Shareware
  1158.       'rausgeben.
  1159.  
  1160.  
  1161. **************************************************************************
  1162.  
  1163.  
  1164.  
  1165.  
  1166.  
  1167. Anhang
  1168. ======
  1169.  
  1170. Schlüsselwörter der Eingabe-Datei:
  1171. ----------------------------------
  1172.  
  1173. GAL16V8, GAL20V8    bestimmt den GAL-Typ
  1174.  
  1175. NC            nichtverwendeter Pin
  1176. GND            Masse    (=LOW)
  1177. VCC            +5V    (=HIGH)
  1178.  
  1179. .T            Ausgangspin ist Tristate-Ausgang
  1180. .E            Tristate-Freigabe durch Produktterm
  1181. .R            Ausgangspin ist Register-Ausgang
  1182.  
  1183. =            Ausgangspin wird eine Gleichung zugewiesen
  1184. +            ODER - Verknüpfung
  1185. *            UND  - Verknüpfung
  1186. /            NICHT
  1187.  
  1188. DESCRIPTION        kennzeichnet das Ende der Boole'schen Gleichungen
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194. Stückliste:
  1195. -----------
  1196.  
  1197.     ICs:
  1198.     ----
  1199.      IC1, IC3, IC4, IC5   :   4 x   4094
  1200.      IC2              :   1 x   4555
  1201.      IC6              :   1 x   4503
  1202.      IC7              :   1 x   4021
  1203.      IC8              :   1 x   74LS06
  1204.      IC9              :   1 x   TL 497
  1205.  
  1206.  
  1207.     Dioden:
  1208.     -------
  1209.     D1-D4              :   4 x   1N4148
  1210.     LED              :   1 x   rot, 3 mm
  1211.  
  1212.     Transistoren:
  1213.     -------------
  1214.     T2, T4, T5          :   3 x   BC237B
  1215.     T1, T3              :   2 x   BC307B
  1216.  
  1217.  
  1218.     Widerstände (1/4 Watt):
  1219.     -----------------------
  1220.     R1, R2, R17          :   3 x   1   KOhm
  1221.     R3-13, R19-26          :  19 x   10  KOhm
  1222.     R28-32              :   5 x   1,8 KOhm
  1223.     R14              :   1 x   1   Ohm
  1224.     R15              :   1 x   33  KOhm
  1225.     R16              :   1 x   10  KOhm Spindeltrimmer
  1226.     R18              :   1 x   4,7 Ohm
  1227.     R27              :   1 x   47  Ohm
  1228.     R33              :   1 x   22  KOhm
  1229.     R34              :   1 x   220 Ohm
  1230.  
  1231.  
  1232.     Relais:
  1233.     -------
  1234.     K1, K2              :   2 x   Siemens V23101A3A101 o.ä.
  1235.                         (5V, 1 x Wechselkontakt)
  1236.  
  1237.     Spule:
  1238.     ------
  1239.     L1              :   1 x   150 uH,    Miniatur-Festinduktivität
  1240.  
  1241.  
  1242.     Kondensatoren:
  1243.     --------------
  1244.     C1              :   1 x   100 pF
  1245.     C2              :   1 x   4,7 uF, Tantal
  1246.     C3              :   1 x   100 nF
  1247.     C4              :   1 x   220 uF, 25V
  1248.     C5, C6              :   2 x   120 nF
  1249.  
  1250.  
  1251.     Sonstiges:
  1252.     ----------
  1253.      IC-Fassungen
  1254.        7 x 16polig
  1255.        2 x 14polig
  1256.        1 x Textool-Fassung 24polig, schmal!
  1257.      25polige  Sub-D-Buchse  (für Amiga 1000)
  1258.      bzw. 25poligen Sub-D-Stecker (für alle anderen Amiga-Typen)
  1259.  
  1260. Legende: u = mikro
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267. Literaturhinweise:
  1268. ------------------
  1269.  
  1270. 1) GALs - Programmierbare Logikbausteine in Theorie und Praxis
  1271.    Bitterle
  1272.    Franzis-Verlag
  1273.    Dieses Buch ist vorallem für Anfänger gut geeignet.
  1274.  
  1275. 2) Programmable Logic Manual - GAL Products
  1276.    SGS-Thomson
  1277.    Dieses Buch (englisch) ist eher für den Profi geeignet.
  1278.  
  1279.  
  1280.  
  1281.